package com.wlyuan.index.api.dto.waybill;

import com.wlyuan.tools.PageSort;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author yuanjie
 */
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class WaybillIndexFilterDTO extends PageSort implements Serializable {
    @ApiModelProperty("运单ID")
    private List<Long> waybillIds;

    @ApiModelProperty("订单ID")
    private Long orderId;

    @ApiModelProperty("合同编号")
    private String contractNo;

    @ApiModelProperty("合同编号")
    private List<String> contractNos;

    @ApiModelProperty("发货方ID")
    private Long customerId;

    @ApiModelProperty("发货方名称")
    private String customerName;

    @ApiModelProperty("发货方类型")
    private Integer customerType;

    @ApiModelProperty("收货方ID")
    private String consigneeId;

    @ApiModelProperty("收货方名称")
    private String consigneeName;

    @ApiModelProperty("承运方ID")
    private Long carrierId;

    @ApiModelProperty("承运方名称")
    private String carrierName;

    @ApiModelProperty("承运方类型")
    private Integer carrierType;

    @ApiModelProperty("司机ID")
    private Long driverId;

    @ApiModelProperty("司机名称")
    private String driverName;

    @ApiModelProperty("发货时间")
    private LocalDateTime fromTimeBegin;

    @ApiModelProperty("发货时间")
    private LocalDateTime fromTimeEnd;

    @ApiModelProperty("到货时间")
    private LocalDateTime toTimeBegin;

    @ApiModelProperty("到货时间")
    private LocalDateTime toTimeEnd;

    @ApiModelProperty("签收时间")
    private LocalDateTime signAtBegin;

    @ApiModelProperty("签收时间")
    private LocalDateTime signAtEnd;

    @ApiModelProperty("创建时间")
    private LocalDateTime createAtBegin;

    @ApiModelProperty("创建时间")
    private LocalDateTime createAtEnd;

    @ApiModelProperty("发货省编码")
    private String fromProvinceCode;

    @ApiModelProperty("发货市编码")
    private String fromCityCode;

    @ApiModelProperty("发货区/县编码")
    private String fromDistrictCode;

    @ApiModelProperty("发货联系人")
    private String fromContactName;

    @ApiModelProperty("发货联系电话")
    private String fromContactMobile;

    @ApiModelProperty("收货省编码")
    private String toProvinceCode;

    @ApiModelProperty("收货市编码")
    private String toCityCode;

    @ApiModelProperty("收货区/县编码")
    private String toDistrictCode;

    @ApiModelProperty("发货省")
    private String fromProvince;

    @ApiModelProperty("发货城市")
    private String fromCity;

    @ApiModelProperty("发货区/县")
    private String fromDistrict;

    @ApiModelProperty("发货地址")
    private String fromAddress;

    @ApiModelProperty("收货省编码")
    private String toProvince;

    @ApiModelProperty("收货城市")
    private String toCity;

    @ApiModelProperty("收货区/县")
    private String toDistrict;

    @ApiModelProperty("收货地址")
    private String toAddress;

    @ApiModelProperty("收货联系人")
    private String toContactName;

    @ApiModelProperty("收货联系电话")
    private String toContactMobile;

    @ApiModelProperty("跟踪编号")
    private String trackNo;

    @ApiModelProperty("跟踪方式")
    private Integer trackType;

    @ApiModelProperty("运输方式 1:市内,2:长途")
    private Integer distanceType;

    @ApiModelProperty("运输模式 1零担 2整车")
    private Integer transportMode;

    private Boolean pick;
    private Boolean deliver;
    private Boolean load;
    private Boolean unload;
    private Boolean insure;

    /**
     * SIGN_EXCEPTION(1, "签收异常"),
     * RECEIPT_LOST(2, "回单丢失"),
     * RECEIPT_PHOTO(3, "上传回单照片"),
     * RECEIPT_RECOVERED(4, "回单补单"),
     * RECEIPT_REVIEWED(5, "回单复核");
     */
    private List<Integer> highlights;

    private List<Integer> signTypes;
    private Boolean signDelayed;

    @ApiModelProperty("总数量-起始")
    private Integer totalQuantityBegin;

    @ApiModelProperty("总数量-截止")
    private Integer totalQuantityEnd;

    @ApiModelProperty("总重量-起始")
    private BigDecimal calculateWeightBegin;

    @ApiModelProperty("总重量-截止")
    private BigDecimal calculateWeightEnd;

    @ApiModelProperty("总体积-开始")
    private BigDecimal calculateVolumeBegin;

    @ApiModelProperty("总体积-截止")
    private BigDecimal calculateVolumeEnd;

    @ApiModelProperty("是否被合单")
    private Boolean combined;

    @ApiModelProperty("是否被拆单")
    private Boolean divided;

    @ApiModelProperty("是否有费用")
    private Boolean generatedFees;

    @ApiModelProperty("是否从单")
    private Boolean affiliated;

    @ApiModelProperty(value = "运单状态")
    private List<Integer> statuses;

    @ApiModelProperty(value = "报价状态")
    private List<Integer> quotationStatuses;

    @ApiModelProperty(value = "对账状态")
    private List<Integer> billStatuses;

    @ApiModelProperty(value = "预期到达")
    private List<Integer> arrivalPlans;

    @ApiModelProperty("进场时间（开始）")
    private LocalDateTime bookingArrivalTimeBegin;

    @ApiModelProperty("进场时间（结束）")
    private LocalDateTime bookingArrivalTimeEnd;

    @ApiModelProperty("提货预约状态 0:待确认 1:已确认")
    private Integer bookingStatus;

    @ApiModelProperty("是否可以提货预约")
    private Boolean bookingEnabled;

    @ApiModelProperty("合单ID")
    private Long combineId;

    @ApiModelProperty("合单号")
    private String combineNo;

    @ApiModelProperty(value = "对账单号")
    private String billNo;

    @ApiModelProperty(value = "对账单名称")
    private String billName;

    @ApiModelProperty("待报价")
    private Boolean callQuote;

    @ApiModelProperty("待对账")
    private Boolean callBill;

    @ApiModelProperty("关键字")
    private String keyword;

    @ApiModelProperty("1=发货方 2=承运方 3=发货方+承运方 4=收货方")
    private Integer character;
    private List<Integer> characters;

    @ApiModelProperty("租户ID")
    private Long tenantId;
}